home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1998 September / EnigmA AMIGA RUN 30 (1998)(G.R. Edizioni)(IT)[!][issue 1998-09].iso / recent / nc-11u1.lha / nc-1.1 / stupidh < prev   
Text File  |  1998-07-15  |  9KB  |  465 lines

  1. #! /bin/sh
  2. ##
  3. ## Find stupid system include dependencies and account for them.  Squirts
  4. ## a sample .h file to stdout containing [too many of] the right things.
  5. ## If you hose the output into "stupid.h", you will get MORE information.
  6. ## This takes a while to run, because it checks so many things.
  7. ##
  8. ## IF YOU HAVE a system/arch/compiler/whatever that is NOT one of:
  9. ##   msdos-msc6.x  ultrix-vax ultrix-mips  sunos4.1.x-sparc  solaris2.x-sparc
  10. ##   aix-rs6k  linux1.[01].x-x86  freebsd-x86  netbsd-x86 hpux
  11. ##   [... hopefully this list will grow very large]
  12. ## or even if you aren't sure, you would be doing me and the net in general
  13. ## a wonderful service by running this and MAILING me the "full" output, e.g.
  14. ##
  15. ##    chmod +x stupidh
  16. ##    ./stupidh > stupid.h
  17. ##    mail hobbit@avian.org < stupid.h
  18. ##
  19. ## WARNING: You may have to change "cc" to "gcc" below if you don't have
  20. ## "cc" [e.g. solaris, thank you very fucking much, Sun].
  21. ## Please note any errors this generates, too...
  22. ##
  23. ## *Hobbit*, 941122 and previous.  VERSION: 1.3 951107
  24. ##
  25. ## edits: Use a consistent naming scheme, for easier identification and cleanup.
  26. ## accomodate gcc's BOGUS assumptions based on input filename.
  27. ## added a few more include-names and try-predefines; some swiped from autoconf.
  28. ## added a couple of things commonly done as #defines so we can SEE 'em
  29.  
  30. ## Here is where to change "cc" to "gcc" if needed:
  31. CC=cc
  32.  
  33. if test -z "${INCLUDE}" ; then
  34.   INCLUDE=/usr/include
  35. fi
  36.  
  37. echo '/* STUPIDH run:'
  38. uname -a
  39. echo '*/'
  40. echo ''
  41.  
  42. echo "/* Includes, from ${INCLUDE} */"
  43. for xx in \
  44. assert ctype cdefs errno file fcntl ioctl malloc stdio stdlib stdarg iostdio \
  45. stddef dirent direct dir ndir utmp wtmp utmpx wtmpx lastlog login paths \
  46. getopt string strings signal setjmp io param stat types time timeb utime \
  47. dos msdos unistd socket netdb varargs sysinfo systeminfo resource ulimit \
  48. stream stropts pstat sysmacros termio termios sgtty tty ttyent lstat select \
  49. sockio wait vfork bsdtypes mkdev utsname sysexits \
  50. ; do
  51.  
  52.   XX=''
  53.   if test -f ${INCLUDE}/${xx}.h ; then
  54.     echo "#include <${xx}.h>"
  55.     XX=`echo $xx | tr '[a-z]' '[A-Z]'`
  56.   fi
  57.   if test -f ${INCLUDE}/sys/${xx}.h ; then
  58.     echo "#include <sys/${xx}.h>"
  59.     XX=`echo $xx | tr '[a-z]' '[A-Z]'`
  60.   fi
  61.  
  62. # everyone seems to have their own conventions; this may not be complete.
  63. # thats why this is so STUPID.
  64. # HAS_xx and USE_xx might indicate functions and available library calls,
  65. # not includes.  Deal...
  66.  
  67.   if test "${XX}" ; then
  68.     echo "#define USE_${XX}_H"
  69.     echo "#define HAS_${XX}_H"
  70.     echo "#define HAS_${XX}"
  71.     echo "#define HAS${XX}"
  72.     echo "#define HAVE_${XX}_H"
  73.     echo "#define HAVE_${XX}"
  74.     echo "#define HAVE${XX}H"
  75.     echo "#define ${XX}H"
  76.     echo ''
  77.   fi
  78. # Stupid hack: "dir" and "dirent" might mutually exclusive, a la GNU
  79. # includes.  This is to prevent it from biting us.
  80.   if test "${xx}" =  "dirent" ; then
  81.     echo "#ifdef _SYS_DIRENT_H"
  82.     echo "#undef _SYS_DIRENT_H"
  83.     echo "#endif"
  84.   fi
  85.  
  86. ### To make a DOS batchfile instead, do this [on a unix box!], xfer results,
  87. ### and have "xxx.bat" that types out all the cruft for %INCLUDE%\%1.
  88. ### WARNING: I might not have gotten the superquoting exactly right here...
  89. # echo "if exist %INCLUDE%\\${xx}.h call xxx ${xx}"
  90. # echo "if exist %INCLUDE%\\sys\\${xx}.h call xxx sys/${xx}"
  91. ### You also need to save and manually run the CPP input file, below.
  92. ### I've done this for msc6 and would appreciate results for other compilers.
  93.  
  94. done
  95. sync
  96. sleep 1
  97.  
  98. ### Note: if all the previous output went to "stupid.h", it will be
  99. ### reincluded in the second part of this.
  100.  
  101. sed -e '/^#/d' -e '/^[     ]*$/d' > st00pid.in << 'EOF'
  102.  
  103. ### More recently, some of this was swiped from the "gcc" doc.  Autoconf is
  104. ### worth a harder look for more ideas; havent gotten around to it yet.
  105. # architectures
  106. alpha
  107. dec
  108. ibm
  109. i370
  110. i960
  111. i860
  112. ibm032
  113. a29k
  114. indigo
  115. iris
  116. mips
  117. mipsel
  118. sparc
  119. sparclite
  120. ncr
  121. sh
  122. harris
  123. apple
  124. vax
  125. x86
  126. ix86
  127. i286
  128. i386
  129. i486
  130. i586
  131. pentium
  132. intel
  133. smp
  134. mpu
  135. mpu8080
  136. mpu8086
  137. amiga
  138. hp
  139. hppa
  140. hp400
  141. hp9000
  142. snake
  143. decmips
  144. mc68000
  145. mc68010
  146. mc68020
  147. mc68030
  148. m68000
  149. m68010
  150. m68020
  151. m68030
  152. m68k
  153. m88k
  154. u3b15
  155. u3b
  156. u3b2
  157. u3b5
  158. u3b15
  159. u3b20d
  160. we32k
  161. ppc
  162. powerpc
  163. arm
  164. aviion
  165. ns32000
  166. iapx286
  167. # minor exception to lc-vs-uc thing?
  168. iAPX286
  169. rs6000
  170. rs6k
  171. risc
  172. sun
  173. sun3
  174. sun4
  175. sun4c
  176. sun4m
  177. sequent
  178. apollo
  179. solbourne
  180. pyr
  181. pyramid
  182. interdata
  183. intertec
  184. pdp11
  185. u370
  186. next
  187. mac
  188. macintosh
  189.  
  190. # for completeness; ya never know ... yes, found it!! -- solaris inet/common.h
  191. big_endian
  192. little_endian
  193. lsbfirst
  194. msbfirst
  195.  
  196. # vendors/OSes
  197. unix
  198. munix
  199. m_unix
  200. gcos
  201. os
  202. gssc
  203. tss
  204. isc
  205. # *This* pair of imbeciles does *caseified defines*.  Pinheads.  One of
  206. # these might trigger before the "tr" step.
  207. NetBSD
  208. netbsd
  209. freebsd
  210. FreeBSD
  211. # cant do 386bsd, I dont think, but ...
  212. _386bsd
  213. bsd386
  214. bsdunix
  215. bsd_2
  216. bsd_20
  217. bsd
  218. bsdi
  219. bsd4
  220. bsd42
  221. bsd43
  222. bsd44
  223. bsd4_2
  224. bsd4_3
  225. bsd4_4
  226. linux
  227. minix
  228. ultrix
  229. ult3
  230. ult4
  231. bull
  232. convex
  233. convex_source
  234. res
  235. rt
  236. esix
  237. dg
  238. dgux
  239. encore
  240. osf
  241. osf1
  242. osf2
  243. # oops:
  244. # osf/1
  245. mach
  246. mach386
  247. mach_386
  248. nextstep
  249. tahoe
  250. reno
  251. sunos
  252. sunos3
  253. sunos4
  254. sunos5
  255. solaris
  256. sun_src_compat
  257. svr3
  258. svr4
  259. svr3_style
  260. svr4_style
  261. sysv
  262. hpux
  263. hp_ux
  264. irix
  265. sgi
  266. sony
  267. news
  268. newsos
  269. news_os
  270. luna
  271. lynxos
  272. riscos
  273. microport
  274. ewsux
  275. ews_ux
  276. mport
  277. dynix
  278. genix
  279. unicos
  280. unixware
  281. msdos
  282. dos
  283. os2
  284. novell
  285. univel
  286. plan9
  287. att
  288. att_unix
  289. sco
  290. odt
  291. aix
  292. aux
  293. a_ux
  294. rsx
  295. vms
  296.  
  297. # compiler cruft??
  298. ansi
  299. ansi_source
  300. ansic
  301. stdc
  302. lint
  303. sccs
  304. libc_sccs
  305. ms
  306. msc
  307. microsoft
  308. gcc
  309. gnu
  310. gnuc
  311. gnucc
  312. gnu_source
  313. sabre
  314. saber
  315. cygnus
  316. source
  317. all_source
  318. gprof
  319. prof
  320. posix
  321. posix_source
  322. posix_sources
  323. posix_c_source
  324. xopen_source
  325. args
  326. p
  327. proto
  328. no_proto
  329. prototype
  330. prototypes
  331. reentrant
  332. kernel
  333. str
  334. trace
  335. asm
  336. libcpp
  337. athena
  338. athena_compat
  339. # some preprocessors cant deal with this
  340. # c++
  341. cxx
  342. cplusplus
  343. borland
  344. turbo
  345. turboc
  346. lattice
  347. highc
  348.  
  349. # various defines that pop out of other .h files that we need to know about
  350. index
  351. strchr
  352. rindex
  353. strrchr
  354. bcopy
  355. memcpy
  356. bzero
  357. memset
  358. path_login
  359. path_lastlog
  360. path_utmp
  361. path_utmpx
  362.  
  363. EOF
  364.  
  365. # FL must be named something.c, so STUPID gcc recognized it as a non-object!!
  366. ( FL=st00pid.c
  367.   if test -f stupid.h ; then
  368.     cp stupid.h $FL
  369.     sync
  370.     echo '/* Re-including stupid.h */'
  371.     sleep 1
  372.   else
  373.     echo '/* Skipping stupid.h */'
  374.   fi
  375.   while read xx ; do
  376.     XX=`echo $xx | tr '[a-z]' '[A-Z]'`
  377.     echo "#ifdef ${xx}" >> $FL
  378.     echo "\"${xx}\" = ${xx}" >> $FL
  379.     echo "#endif" >> $FL
  380.     echo "#ifdef _${xx}" >> $FL
  381.     echo "\"_${xx}\" = _${xx}" >> $FL
  382.     echo "#endif" >> $FL
  383.     echo "#ifdef _${xx}_" >> $FL
  384.     echo "\"_${xx}_\" = _${xx}_" >> $FL
  385.     echo "#endif" >> $FL
  386.     echo "#ifdef __${xx}" >> $FL
  387.     echo "\"__${xx}\" = __${xx}" >> $FL
  388.     echo "#endif" >> $FL
  389.     echo "#ifdef __${xx}__" >> $FL
  390.     echo "\"__${xx}__\" = __${xx}__" >> $FL
  391.     echo "#endif" >> $FL
  392.     echo "#ifdef ${XX}" >> $FL
  393.     echo "\"${XX}\" = ${XX}" >> $FL
  394.     echo "#endif" >> $FL
  395.     echo "#ifdef _${XX}" >> $FL
  396.     echo "\"_${XX}\" = _${XX}" >> $FL
  397.     echo "#endif" >> $FL
  398.     echo "#ifdef _${XX}_" >> $FL
  399.     echo "\"_${XX}_\" = _${XX}_" >> $FL
  400.     echo "#endif" >> $FL
  401.     echo "#ifdef __${XX}" >> $FL
  402.     echo "\"__${XX}\" = __${XX}" >> $FL
  403.     echo "#endif" >> $FL
  404.     echo "#ifdef __${XX}__" >> $FL
  405.     echo "\"__${XX}__\" = __${XX}__" >> $FL
  406.     echo "#endif" >> $FL
  407.   done
  408. # and pick up a few specials
  409.   echo "#ifdef major" >> $FL
  410.   echo "\"major\" = major (x)" >> $FL
  411.   echo "\"minor\" = minor (x)" >> $FL
  412.   echo "#endif" >> $FL
  413.   echo "#ifdef FD_SETSIZE" >> $FL
  414.   echo "\"FD_SETSIZE\" = FD_SETSIZE" >> $FL
  415.   echo "#endif" >> $FL
  416. ) < st00pid.in
  417. sync
  418.  
  419. echo '/* Compiler predefines:'
  420. ${CC} -E st00pid.c | sed -e '/^#/d' -e '/^[     ]*$/d'
  421. echo '*/'
  422. sync
  423.  
  424. cat > st00pid.c << 'EOF'
  425. #include <stdio.h>
  426. main() {
  427. union {
  428.   char *bletch;
  429.   int *i;
  430. } yow;
  431. static char orig[16];
  432.   strcpy (orig, "ABCDEFGHIJK");
  433.   yow.bletch = orig;
  434.   printf ("endian thing: %s = 0x%lx, addrbyte = %x -- ",
  435.     yow.bletch, *yow.i, *yow.i & 0xFF);
  436.   printf (((*yow.i & 0xff) == 0x41) ? "LITTLE\n" : "BIG\n");
  437.   printf ("short %d;  int %d;  long %d\n",
  438.     sizeof (short), sizeof (int), sizeof (long));
  439. }
  440. EOF
  441.  
  442. ${CC} -o st00pid.x st00pid.c
  443. echo '/* Architecture:'
  444. ./st00pid.x
  445. echo '*/'
  446.  
  447. ### dont nuke if generating DOS batchfiles
  448. rm -f st00pid.*
  449. sync
  450. exit 0
  451.  
  452. ### stuff remaining to deal with:
  453. # maybe take out the slew of HAS_* and HAS* excess predefines, and only use
  454. #   our "standardized" scheme [like we were going to generate a real includible
  455. #   file outa this??]
  456. # various POSIX_ME_HARDERisms:
  457. #   vfork
  458. #   lockf/flock/fcntl/euuugh
  459. #   signal stuff
  460. #   termio/termios/sgtty hair
  461. # strdup and related
  462. # ifdef HAVE_STD_LIB and such nonsense
  463. # auto-sniff cc-vs-gcc somehow?  maybe a straight OR with exit statii..
  464.  
  465.